package com.cloud.order.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("order")
public class Order extends Model<Order> {
    /**
     * 订单号作为订单识别的标识，一般按照某种特定规则生成，根据订单的增加进行自增，
     * 同时在设计订单号的时候考虑订单无序设置（防止竞争者或者第三方来估算订单量）。
     * 订单号后续用作订单唯一标示用于对接WMS（仓存管理系统）和TMS（运输管理系统）时的订单识别。
     */
    private String orderCode;

    private Integer status;

    /**
     * 用户信息
     * 指买家的相关信息，包括名称、地址、手机号。
     * O2O还会多一种情况就是自提点，这样地址则会变为自提点的地址。
     * 地址信息在后续会作用在WMS和TMS上用于区分区域和配送安排。
     */
    private String userId;

    private String userName;

    private String userAddress;
    /**
     * 商品的基本信息和库存，
     * 金额由于比较特殊所以我把金额独立在商品信息以外说，
     * 不过逻辑上其实都属于商品信息范畴。
     * 商品信息主要影响库存更新和WMS产生。
     */
    private String good;

    /**
     * 订单产生的商品信息，
     * 这里面除了要记录最终的金额，
     * 过程金额也需要记录。
     * 比如商品分摊的优惠金额、支付金额，应付金额等。
     * 在后续的订单结算、退换货、财务等环节都需要使用。
     */
    private BigDecimal amount;

    /**
     * 时间信息
     * 记录订单每个状态节点的触发时间。
     */
    private LocalDateTime localDateTime;
}

